import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;

public class Day_Fourteen {


    //给定一个长度为 n 的仅包含正整数的数组，另外有一些操作，每次操作你可以选择数组中的任意一个元素
    //a
    //i
    //
    //a
    //i
    //​
    //   ，同时数组中所有等于
    //a
    //i
    //−
    //1
    //
    //a
    //i
    //​
    // −1  和
    //a
    //i
    //+
    //1
    //
    //a
    //i
    //​
    // +1  的元素会被全部移除，同时你可以得到
    //a
    //i
    //
    //a
    //i
    //​
    //   分，直到所有的元素都被选择或者删除。
    //请你计算最多能得到多少分。
    //数据范围： 数组长度满足
    //1
    //≤
    //n
    //≤
    //1
    //0
    //5
    //
    //1≤n≤10
    //5
    //   ，数组中的元素大小都满足
    //1
    //≤
    //a
    //i
    //≤
    //1
    //0
    //4
    //
    //1≤a
    //i
    //​
    // ≤10
    //4
    //
    //输入描述：
    //第一行输入一个正整数 n 表示数组的长度
    //第二行输入 n 个数字表示数组的各个元素值。
    //输出描述：
    //输出能得到的最大分数。
    //示例1
    //输入：
    //2
    //1 2
    //复制
    //输出：
    //2
    //复制
    //说明：
    //直接选择元素 2 ，然后 1 被同时移除。
    //
    //示例2
    //输入：
    //3
    //1 2 3
    //复制
    //输出：
    //4
    //复制
    //说明：
    //先选择 3 ，同时 2 被移除，再选择 1 ，即得到 4 分。
    //示例3
    //输入：
    //9
    //1 2 1 3 2 2 2 2 3
    //复制
    //输出：
    //10
    //复制
    //说明：
    //第一步选择一个 2 ，然后所有 1 和 3 都被移除了，此时数组中剩下的是 [2,2,2,2] ，依次选择他们即可得到 10 分
    static int N = 100010;
    static int[] sum = new int[N];
    static int[] f = new int[N];
    static int[] g = new int[N];
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n= s.nextInt();
        int x= 0;
        for (int i = 0; i < n; i++) {
            x = s.nextInt();
            sum[x] += x;
        }
        for (int i = 1; i < N; i++) {
            f[i] = g[i-1] +sum[i];
            g[i] = Math.max(g[i-1],f[i-1]);
        }
        System.out.println(Math.max(f[N-1],g[N-1]));
    }


    //链接：https://www.nowcoder.com/questionTerminal/6736cc3ffd1444a4a0057dee89be789b
    //来源：牛客网
    //
    //牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队
    // ,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
    //例如:
    //一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
    //一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
    //一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
    //为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
    //如样例所示:
    //如果牛牛把6个队员划分到两个队伍
    //如果方案为:
    //team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
    //而如果方案为:
    //team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
    //没有比总和为10更大的方案,所以输出10.
    //
    //输入描述:
    //输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
    //
    //第二行包括3*n个整数a_i(1 ≤ a_i ≤ 10^9),表示每个参赛选手的水平值.
    //
    //
    //输出描述:
    //输出一个整数表示所有队伍的水平值总和最大值.
    //示例1
    //输入
    //2
    //5 2 8 5 1 5
    //输出
    //10
    public static void main2(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int[] arr = new int[n*3];
        for (int i = 0; i < n*3; i++) {
            arr[i] = s.nextInt();
        }
        Arrays.sort(arr);

        int pos = n*3-2;
        int count = 1;
        long ret = 0;
        while(count++ <=n){
            ret += arr[pos];
            pos -= 2;
        }
        System.out.println(ret);
    }


    //链接：https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32
    //来源：牛客网
    //nowcoder有两盒（A、B）乒乓球，有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类
    // 并且每种球的数量不少于B盒中的数量，该怎么办呢？
    //输入描述:
    //输入有多组数据。
    //每组数据包含两个字符串A、B，代表A盒与B盒中的乒乓球，每个乒乓球用一个大写字母表示，
    // 即相同类型的乒乓球为相同的大写字母。
    //字符串长度不大于10000。
    //输出描述:
    //每一组输入对应一行输出：如果B盒中所有球的类型在A中都有，并且每种球的数量都不大于A，
    // 则输出“Yes”；否则输出“No”。
    //示例1
    //输入
    //ABCDFYE CDE<br/>ABCDGEAS CDECDE
    //输出
    //Yes<br/>No
    public static void main1(String[] args) {
        Scanner s = new Scanner(System.in);
        while(s.hasNext()) {
            char[] s1 = s.next().toCharArray();
            char[] s2 = s.next().toCharArray();
            int[] hash = new int[26];

            for (int i = 0; i < s1.length; i++) {
                hash[s1[i] - 'A']++;
            }
            boolean ret = true;
            for (int i = 0; i < s2.length; i++) {
                if (--hash[s2[i] - 'A'] < 0) {
                    ret = false;
                    break;
                }
            }
            System.out.println(ret ? "Yes" : "No");
        }
    }
}
